import java.util.Arrays;
import java.util.Scanner;

/**
 * 在平面上有两个矩形 R1 和 R2，它们的边都与坐标轴平行。
 * <p>
 * 设：
 * - (x1, y1) 和 (x2, y2) 分别是矩形 R1 的左下角和右上角坐标；
 * - (x3, y3) 和 (x4, y4) 分别是矩形 R2 的左下角和右上角坐标。
 * <p>
 * 请计算 R1 和 R2 的总面积。
 * <p>
 * 注意：
 * - 如果 R1 和 R2 有重叠区域，重叠区域的面积只计算一次。
 * <p>
 * 输入格式：
 * 输入只有一行，包含 8 个整数，依次是：
 * x1, y1, x2, y2, x3, y3, x4, y4。
 * <p>
 * 输出格式：
 * 一个整数，代表 R1 和 R2 的总面积（重叠区域只计算一次）。
 */
public class 矩形总面积 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 存储坐标（long 类型以防数据溢出）
        long[][] coordinates = new long[2][4];
        // 输入坐标
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 4; j++) {
                coordinates[i][j] = sc.nextLong();
            }
        }

        /**
         * (a, b) -> Long.compare(a[0], b[0])：这是一个自定义的比较器 ( Comparator )，用于定义排序规则。具体含义如下：
         * a 和 b 是二维数组 coordinates 中的两个一维数组（即两个矩形的坐标）。
         * a[0] 和 b[0] 分别表示两个矩形的左下角横坐标（x1 和 x3）。
         * Long.compare(a[0], b[0]) 按照左下角横坐标的升序对两个矩形进行排序：
         * 如果 a[0] < b[0]，返回负数，表示 a 排在前面；
         * 如果 a[0] == b[0]，返回 0，表示两者相等；
         * 如果 a[0] > b[0]，返回正数，表示 b 排在前面。
         */
        // 按照矩形左下角横坐标（x 坐标）的升序对两个矩形的坐标进行排序
        Arrays.sort(coordinates, (a, b) -> Long.compare(a[0], b[0]));

        // 求总面积
        // 矩形面积 = (右坐标 x2 - 左坐标 x1) * (上坐标 y2 - 下坐标 y1)（底乘高）
        long area = (coordinates[0][2] - coordinates[0][0]) * (coordinates[0][3] - coordinates[0][1])
                + (coordinates[1][2] - coordinates[1][0]) * (coordinates[1][3] - coordinates[1][1]);
        // 如果不存在重叠区域，则直接输出矩形面积
        if (coordinates[1][0] >= coordinates[0][2] || coordinates[1][1] >= coordinates[0][3]) {
            System.out.println(area);
        } else {
            // 计算重叠区域的面积（上顶点和右顶点是同一个点）
            // 宽：R1 的右顶点 x2 和 R2 的右顶点 x4 的最小值 -
            //      R1 的左顶点 x1 和 R2 的左顶点 x3 的最大值（其实也就是 R2 的左顶点 x 的大小）
            //      <-对于被 sort 过的矩形来说
            long weight = Math.min(coordinates[0][2], coordinates[1][2]) - coordinates[1][0];
            // 高：R1 的上顶点 y2 和 R2 的上顶点 y4 的最小值 -
            //      R1 的下顶点 y1 和 R2 的下顶点 y3 的最大值
            //      <-对于被 sort 过的矩形来说
            long height = Math.min(coordinates[0][3], coordinates[1][3]) - Math.max(coordinates[0][1], coordinates[1][1]);
            area -= weight * height;
            System.out.println(area);
        }
    }
}

/**
 * 样例输入：
 * 2 1 7 4 5 3 8 6
 * <p>
 * 样例输出：
 * 22
 */
